/**
 * 本地存储工具类
 */
class Storage {
  /**
   * 设置存储
   * @param key 键
   * @param value 值
   * @param expire 过期时间（秒）
   */
  static set(key: string, value: any, expire?: number): void {
    const data = {
      value,
      expire: expire ? Date.now() + expire * 1000 : null
    }
    uni.setStorageSync(key, JSON.stringify(data))
  }

  /**
   * 获取存储
   * @param key 键
   * @param defaultValue 默认值
   */
  static get<T = any>(key: string, defaultValue?: T): T | null {
    try {
      const data = uni.getStorageSync(key)
      if (!data) return defaultValue ?? null

      const parsed = JSON.parse(data)
      
      // 检查是否过期
      if (parsed.expire && Date.now() > parsed.expire) {
        this.remove(key)
        return defaultValue ?? null
      }

      return parsed.value ?? defaultValue ?? null
    } catch (error) {
      console.error('Storage get error:', error)
      return defaultValue ?? null
    }
  }

  /**
   * 移除存储
   * @param key 键
   */
  static remove(key: string): void {
    uni.removeStorageSync(key)
  }

  /**
   * 清空所有存储
   */
  static clear(): void {
    uni.clearStorageSync()
  }

  /**
   * 获取所有存储信息
   */
  static getInfo(): Promise<UniNamespace.GetStorageInfoSuccessCallbackResult> {
    return new Promise((resolve, reject) => {
      uni.getStorageInfo({
        success: resolve,
        fail: reject
      })
    })
  }

  /**
   * 检查键是否存在
   * @param key 键
   */
  static has(key: string): boolean {
    try {
      const data = uni.getStorageSync(key)
      return data !== ''
    } catch (error) {
      return false
    }
  }
}

export default Storage
